package com.prueba.client.datosYlogica;


import java.util.Collection;
import java.util.Iterator;
import com.prueba.client.extensiones.*;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.prueba.client.interfaz.grillas.ListGridPlanDeAcciones;
import com.prueba.client.servicios.Proxy;
import com.prueba.compartido.Accion;
import com.prueba.compartido.Seccion;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.grid.ListGridRecord;


public class GestorAcciones extends MyDataSource<Accion> {
	
    private static GestorAcciones instance = null;  
    public static GestorAcciones getInstance() {  
        if (instance == null) 
            instance = new GestorAcciones();  
        return instance;  
    }  
  
    public GestorAcciones() {  
    	super("Acciones");
    }
    
	@Override
	protected ListGridRecord toListGridRecord(Accion d) {
		ListGridRecord r = new ListGridRecord();
		r.setAttribute("nivel", d.getNivel());
		r.setAttribute("estado", d.getEstado());
		r.setAttribute("descripcion", d.getDescripcion());

		return r;
	}
	@Override
	protected Accion toDato(Record r) {
		return new Accion(r.getAttribute("nivel"),r.getAttribute("estado"),r.getAttribute("descripcion"));
	}

	@Override
	protected boolean actualizarCampo(Par<Accion, ListGridRecord> dato, String campo, Object valor) {
		if (campo.equals("estado")) {
			// dato.primero.setCosto(((Integer)valor).intValue());
			dato.segundo.setAttribute("estado", (String) valor);
			return true;
		}
		return false;
	}

	@Override
	public String obtenerClave(Accion dato) {
		return dato.getNivel();
	}

	@Override
	protected DataSourceField[] getDataSourceFields() {
		//Campo nivelSeccion:
        DataSourceTextField seccionNivel=new DataSourceTextField("nivel");
        seccionNivel.setPrimaryKey(true);  
        seccionNivel.setRequired(true); 
        
    	//Campo estado:
    	DataSourceTextField accionEstado = new DataSourceTextField("estado", "Estado");
    	accionEstado.setValueMap(Accion.ESTADOS_ACCIONES);
    	accionEstado.setRequired(true);  

    	//Campo descripcion:
    	DataSourceTextField descripcion = new DataSourceTextField("descripcion", "Descripcion");
    	accionEstado.setRequired(true); 
    	
		return new DataSourceField[] { seccionNivel, accionEstado, descripcion };
	}    
	
	public static void actualizarEstado(String nivel, String estado) {
		getInstance().actualizarElemento(nivel,"estado",estado);
	}
	
	public static void ejecutarPlaner(int costoIteracion) {
    	AsyncCallback<Collection<Accion>> callback = new AsyncCallback<Collection<Accion>>() {
           	@Override
			public void onSuccess(Collection<Accion> result) {
           		
           		getInstance().cargarDatos(result);
           		//LIMPIO 
           		/*Datos.acciones.clear();
       			ListGridPlanDeAcciones.getInstance().selectAllRecords();
       			ListGridPlanDeAcciones.getInstance().removeSelectedData();
       			//RECARGO
           		for(Iterator<Accion> it=result.iterator();it.hasNext();){
           				Accion a=it.next();
           				AccionRecord r=AccionRecord.toRecord(a);
           				getInstance().addData(r);
           				Datos.acciones.put(a.getNivel(), new Par<AccionRecord,Accion>(r,a));
           		}*/
			}
			@Override
			public void onFailure(Throwable caught) {
				SC.say(caught.getMessage());
	
			}
    	};
    	
    	try {
	    	Collection<Seccion> listaSeccionesPriorizadas=GestorVistas.getSeccionesPriorizadas();
	    	
	    	/*System.out.println("Lista de secciones priorizadas:");
	    	for(Seccion s: listaSeccionesPriorizadas){
	    		System.out.println("Vista:"+s.getNombreVista()+"Nivel: "+s.getNivel());
	    	}*/
	    	
	    	Proxy.getServicios().ejecutarPlaner(listaSeccionesPriorizadas , 
	    			costoIteracion, callback);
    	}catch(Exception e){
    		e.printStackTrace();
    	}
    	/*
    	try {
			Proxy.getServicios().ejecutarPlaner(Datos.listastakeholders, 
					GestorVistas.getSeccionesPriorizadas(),//Datos.listasecciones, 
					Datos.listapreferencias, 
					costoIteracion, Datos.listaAcciones, Datos.listaSugerencias, callback);
		} catch (ServerException e) {
			SC.warn(e.getMessage());
		}*/
	}




}
